const arrayData = [
  {
    id: 1,
    name: 'jack',
    pid: 0
  },
  {
    id: 2,
    name: 'jack',
    pid: 1
  },
  {
    id: 3,
    name: 'jack',
    pid: 1
  },
  {
    id: 4,
    name: 'jack',
    pid: 2
  }
]
/**
 * 获取当前节点及其所有父级节点ID
 * @param {*} flatArray 一维数组
 * @param {*} itemId 当前节点ID
 * @param {*} id 节点ID属性名，默认为id
 * @param {*} pid 父级ID属性名，默认为pid
 */
const getIdsByArray = (flatArray, itemId, id = 'id', pid = 'pid') => {
  let ids = [itemId] // 初始化数组，先插入当前子节点ID
  // 匹配到当前节点
  let child = flatArray.find(_ => _[id] === itemId)
  while (child && child[pid]) {
    ids = [child[pid], ...ids] // 添加其父级 id
    child = flatArray.find(_ => _[id] === child[pid])
  }
  return ids
}
const reulst = getIdsByArray(arrayData, 4)
console.log(reulst)
